La Necessità del Ri-hash
Per garantire le prestazioni desiderate nel caso medio per ricerca e inserimento, il Fattore di Carico () deve essere rigorosamente limitato, dove è il numero di elementi e è la capacità della tabella.
Se è consentito crescere indefinitamente, le collisioni aumentano esponenzialmente e la complessità temporale media si degrada verso .
| Condizione | Azione Attivata | Impatto |
|---|---|---|
| Standard inserimento | Efficienza ottimale mantenuta. | |
| Ridimensionamento (Ri-hash) | Ripristina le prestazioni, ma comporta un costo temporaneo di costo. |
Soglie Comuni (): 0.70 a 0.75.
Il Processo di Ridimensionamento
Il ridimensionamento richiede il ricalcolo dell'indice hash per ogni singolo elemento attualmente presente nella tabella, un processo noto come Ri-hash.
- Determinazione Nuova Capacità: Seleziona una nuova capacità , di solito il doppio della capacità corrente (). Questo garantisce che il nuovo sia la metà del valore critico.
- Creazione Tabella: Allocare un nuovo array di tabella hash di dimensione .
- Iterazione Elementi: Scorri tutti i elementi esistenti nella vecchia tabella.
- Ri-hash: Per ogni chiave , calcola l'indice nuovo usando il modulo aggiornato:
- Inserimento: Inserisci l'elemento nella nuova tabella all'indice .
Nota: Poiché il modulo cambia, copiare semplicemente l'array è impossibile; ogni elemento deve essere reinserito.
Costo Ammortizzato
Perché il Ridimensionamento è
Il ridimensionamento richiede il trattamento di tutti i elementi, il che significa che l'operazione stessa impiega tempo, il che viola temporaneamente l'obiettivo di inserimento.
Analisi Ammortizzata
Utilizziamo Analisi Ammortizzata per giustificare questo costo. Se la tabella raddoppia la sua dimensione ogni volta che si ridimensiona (crescita esponenziale), il costo elevato di viene distribuito su un gran numero di inserimenti intermedi inserimenti.
Il costo medio di qualsiasisingolo inserimento, considerando il ridimensionamento periodico rimane .
1. Una mappa hash ha una capacità e un fattore di carico massimo . A quale numero di elementi () deve essere attivato il ridimensionamento?
2. Durante un ridimensionamento, perché non possiamo semplicemente copiare gli elementi dalla vecchia tabella a quella più grande?
3. Qual è la complessità temporale ammortizzata di un inserimento in una tabella hash che raddoppia la sua dimensione durante il ridimensionamento?
4. Qual è la conseguenza principale del non ridimensionare una tabella hash quando il suo fattore di carico diventa troppo alto?